Hledani v ListView WAS: Mnoho polozek v TListView
Otázka od: Jiri Cincura
13. 8. 2004 15:25
Ahoj,
chtel bych jeste nevazat na predchozi dotaz. Potrebuji v LV po kliknuti na
TButton vybrat vsechny Caption vsech Selected polozek. LV mam ve virtualnim
modu. Problem je v tom, ze pri 40 tis. zaznamech to "chvili" trva (je to
vlastne linearni prochazeni). Chtel jsem udelat pomocnou strukturu, kde bych
si drzel jen ty Selected, ale mam MultiSelect na True a kdyz jich vyberu vic
(pres Shift+klik) tak to jaksi nezachyti vsechny. Vedel by nekdo, jak z teto
prekerni situace?
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net
Odpovedá: Martin Cajbik
13. 8. 2004 16:24
Prejdenie 40 tis zaznamov by malo byt aj na slabsom stroji velmi rychle.
Skor by som hladal problem v naslednom spracovani udajov (neviem co
presne obnasa v tomto pripade "vybrat vsechny Caption"). Pokial by si to
prechadzanie chcel predsa len o nieco urychlit, mozes pouzit nieco
taketo (v tomto pripade sa Caption ulozi do TMemo).
var
i, j: Integer;
begin
Memo1.Lines.BeginUpdate;
j:= ListView1.SelCount;
for i:= ListView1.Selected.Index to ListView1.Items.Count-1 do
if ListView1.Items[i].Selected then
begin
Memo1.Lines.Add(ListView1.Items[i].Caption);
Dec(j);
if j = 0 then
break;
end;
Memo1.Lines.EndUpdate;
Martin Cajbik
Jiri Cincura wrote:
> Ahoj,
> chtel bych jeste nevazat na predchozi dotaz. Potrebuji v LV po kliknuti na
> TButton vybrat vsechny Caption vsech Selected polozek. LV mam ve virtualnim
> modu. Problem je v tom, ze pri 40 tis. zaznamech to "chvili" trva (je to
> vlastne linearni prochazeni). Chtel jsem udelat pomocnou strukturu, kde bych
> si drzel jen ty Selected, ale mam MultiSelect na True a kdyz jich vyberu vic
> (pres Shift+klik) tak to jaksi nezachyti vsechny. Vedel by nekdo, jak z teto
> prekerni situace?
Odpovedá: Jiri Cincura
13. 8. 2004 16:42
Martin Cajbik wrote:
> Prejdenie 40 tis zaznamov by malo byt aj na slabsom stroji velmi
> rychle.
> Skor by som hladal problem v naslednom spracovani udajov (neviem co
> presne obnasa v tomto pripade "vybrat vsechny Caption"). Pokial by si
Item[Cnt].Caption jsem myslel, ale to je jedno
> to prechadzanie chcel predsa len o nieco urychlit, mozes pouzit nieco
> taketo (v tomto pripade sa Caption ulozi do TMemo).
To s tim SelCount me nenapadlo, ale problem je pokud je vybrana prvni stovka
a pak posledni tisicovka.
Ale i tak je to zlepseni (pokud to nejni nejaky blby pripad).
Ale nevedel by stejne nekdo, jak na to?
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net
Odpovedá: Jiri Cincura
13. 8. 2004 17:03
Martin Cajbik wrote:
> Prejdenie 40 tis zaznamov by malo byt aj na slabsom stroji velmi
> rychle.
No na 256MB RAM 1,13GHz Celeron na NB to trva 3-4s.
--
Jiri Cincura
e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
ICQ: 314711544
web: http://www.cincura.net; http://photo.cincura.net
Odpovedá: Andreas Bednarek
16. 8. 2004 8:45
Mas-li virtualni mod tak mas urcite data ulozena v nejakych vice-mene
vlastnich strukturach (napr. TList).
1. Tady bych zacal a necetl property Item.Caption, ale prochazel sve pole,
to by melo byt rychlejsi, jinak se bude vyvolavat jeste OnData aby
Item.Caption mohlo neco vratit..
2. Vybrane polozky prochazej takto
next_item := Selected;
while next_item <> nil do begin
//zde zpracuj data ve vlastnim bufferu podle indexu polozky -
next_item.Index;
next_item := GetNextItem(next_item, sdBelow, [isSelected]);
end;
projdes tak opravdu jen vybrane polozky
vice najdes v helpu u GetNextItem
A.B.
----- Original Message -----
From: "Jiri Cincura" <diskuze@cincura.net>
To: <delphi-l@clexpert.cz>
Sent: Friday, August 13, 2004 4:23 PM
Subject: Hledani v ListView WAS: Mnoho polozek v TListView
> Ahoj,
> chtel bych jeste nevazat na predchozi dotaz. Potrebuji v LV po kliknuti
na
> TButton vybrat vsechny Caption vsech Selected polozek. LV mam ve
virtualnim
> modu. Problem je v tom, ze pri 40 tis. zaznamech to "chvili" trva (je to
> vlastne linearni prochazeni). Chtel jsem udelat pomocnou strukturu, kde
bych
> si drzel jen ty Selected, ale mam MultiSelect na True a kdyz jich vyberu
vic
> (pres Shift+klik) tak to jaksi nezachyti vsechny. Vedel by nekdo, jak z
teto
> prekerni situace?
>
> --
> Jiri Cincura
> e-mail: mailto:jiri@cincura.net; mailto:xcincura@informatics.muni.cz
> ICQ: 314711544
> web: http://www.cincura.net; http://photo.cincura.net
>
>
>
>